#ifndef INT_SHCEME_ADAMS_MOULTON_COEFF_HPP
#define INT_SHCEME_ADAMS_MOULTON_COEFF_HPP

#include <array>

namespace IntScheme {
struct AMCoeff {
  static constexpr int minP = 2;
  static constexpr int maxP = 5;
  static constexpr int s[] = {1, 2, 3, 4};
  static constexpr int offset[] = {0, 2, 5, 9};
  // save from a_n to a_{n-s}
  static constexpr std::array<double, 14> alpha = {1, -1, 1, -1, 0, 1, -1,
                                                   0, 0,  1, -1, 0, 0, 0};
  // save from b_n to b_{n-s}
  static constexpr std::array<double, 14> beta = {
      0.5,         0.5,          5.0 / 12,    8.0 / 12,   -1.0 / 12,
      9.0 / 24,    19.0 / 24,    -5.0 / 24,   1.0 / 24,   251.0 / 720,
      646.0 / 720, -264.0 / 720, 106.0 / 720, -19.0 / 720};
};
} // namespace IntScheme

#endif